home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
pcl
/
cl-nd-cl.lha
/
clue
/
clio
/
examples
/
cmd-frame.lisp
next >
Wrap
Text File
|
1990-07-19
|
6KB
|
161 lines
;;; -*- Mode:Lisp; Package:CLIO-OPEN; Base:10; Lowercase:T; Syntax:Common-Lisp -*-
;;;----------------------------------------------------------------------------------+
;;; |
;;; TEXAS INSTRUMENTS INCORPORATED |
;;; P.O. BOX 149149 |
;;; AUSTIN, TEXAS 78714-9149 |
;;; |
;;; Copyright (C) 1989, 1990 Texas Instruments Incorporated. |
;;; |
;;; Permission is granted to any individual or institution to use, copy, modify, and |
;;; distribute this software, provided that this complete copyright and permission |
;;; notice is maintained, intact, in all copies and supporting documentation. |
;;; |
;;; Texas Instruments Incorporated provides this software "as is" without express or |
;;; implied warranty. |
;;; |
;;;----------------------------------------------------------------------------------+
(in-package "CLIO-OPEN")
(export '(
command-frame
command-frame-content
command-frame-controls
make-command-frame
)
'clio-open)
(defcontact command-frame (core core-shell top-level-session)
()
(:documentation "A top-level-session containing a content and a set of controls.")
(:resources
(content :type (or function list) :initform nil)
(controls :type (or function list) :initform nil)))
(defmethod initialize-instance :after ((command-frame command-frame)
&rest initargs &key content controls)
(with-slots (width height) command-frame
;; Initialize command-frame-form
(assert content () "No content defined for ~a." command-frame)
(multiple-value-bind (content-constructor content-initargs)
(etypecase content
(function content)
(list (values (first content) (rest content))))
(let*
((content-name (or (getf content-initargs :name) :content))
(hlinks `((
:from :command-frame-form
:to ,content-name
:attach-from :left
:attach-to :left
:maximum 0)
(
:from ,content-name
:to :command-frame-form
:attach-from :right
:attach-to :right
:maximum 0)
(
:from :command-frame-form
:to :controls
:attach-from :left
:attach-to :left
:maximum 0)
(
:from :controls
:to :command-frame-form
:attach-from :right
:attach-to :right
:maximum 0)))
(vlinks `((
:from :command-frame-form
:to :controls
:attach-from :top
:attach-to :top
:maximum 0)
(
:from :controls
:to ,content-name
:maximum 0)
(
:from ,content-name
:to :command-frame-form
:attach-from :bottom
:attach-to :bottom
:maximum 0)
))
(form (make-form
:name :command-frame-form
:parent command-frame
:width width
:height height
:horizontal-links hlinks
:vertical-links vlinks)))
;; Initialize content
(apply content-constructor
:name content-name
:parent form
:max-height :infinite
:min-height 0
:max-width :infinite
:min-width 0
content-initargs)
;; Initialize controls area
(multiple-value-bind (controls-constructor controls-initargs)
(etypecase controls
(null
(let ((space (point-pixels
(contact-screen command-frame)
(getf *dialog-point-spacing* (contact-scale command-frame)))))
(values 'make-table
`(
:columns :maximum
:column-alignment :center
:same-height-in-row :on
:horizontal-space ,space
:left-margin ,space
:right-margin ,space
:top-margin ,(pixel-round space 2)
:bottom-margin ,(pixel-round space 2)))))
(function controls)
(list (values (first controls) (rest controls))))
(apply controls-constructor
:parent form
:name :controls
:border-width 0
:max-width :infinite
:min-width 0
controls-initargs))))))
(defun command-frame-form (command-frame)
(first (slot-value command-frame 'children)))
(defmethod command-frame-content ((command-frame command-frame))
(first (slot-value (command-frame-form command-frame) 'children)))
(defmethod command-frame-controls ((command-frame command-frame))
(second (slot-value (command-frame-form command-frame) 'children)))
(defun make-command-frame (&rest initargs)
(apply #'make-contact 'command-frame initargs))
(defmethod rescale :before ((command-frame command-frame))
(let ((controls (command-frame-controls command-frame)))
(multiple-value-bind (pw ph) (preferred-size controls)
(declare (ignore pw))
(setf (form-max-height controls) (setf (form-min-height controls) ph)))))